#include <basic/errcode.h>

unsigned int encoding_is_utf8(char *str)
{/*{{{*/
    int len=strlen(str);
    int  bytes=0;   // UFT8可用1-6个字节编码,ASCII用一个字节
    int i;
    for(i=0; i<len; ++i)
    {
        unsigned char chr=str[i];
        if(bytes == 0) // 首字符
        {
            if(chr >= 0x80)
            {
                if(0xFC <= chr && chr <= 0xFD)  // 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
                    bytes=6;
                else if(0xF8 <= chr)    // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
                    bytes=5;
                else if(0xF0 <= chr)    // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
                    bytes=4;
                else if(0xE0 <= chr)    // 1110xxxx 10xxxxxx 10xxxxxx
                    bytes=3;
                else if(0xC0 <= chr)    // 110xxxxx 10xxxxxx
                    bytes=2;
                else
                    return(IS_FALSE);
                --bytes;
            }
        }
        else // 非首字节：0x80(10000000) - 0xBF(10111111)
        {
            if((chr & 0xC0) != 0x80 )
                return(IS_FALSE);
            --bytes;
        }
    }
    if(bytes > 0)
        return(IS_FALSE);
    return(IS_TRUE);
}/*}}}*/
